import server from "./server.js"
import cache from "./cache.js"

// 此vm参数为页面的实例，可以通过它引用vuex中的变量
module.exports = (app) => {
    // 初始化请求配置
    uni.$u.http.setConfig((config) => {
        /* config 为默认全局配置*/
        config.baseURL = server.baseURL+"/api" /* 根域名 */
		config.custom.auth = true
        return config
    })
	
	// 请求拦截
	uni.$u.http.interceptors.request.use((config) => {
		console.log("==================>请求进来了=================");
		
		// 可使用async await 做异步操作
	    // 初始化请求拦截器时，会执行此方法，此时data为undefined
	    // config.data = config.data || {auth:true}
		// 获取每个请求中的config的data参数是否要鉴权
		if(config.custom.auth) {
			const token=cache.get("token");//从缓存中获取
			const userid=cache.get("userid");//从缓存中获取
			if(token){
				// 可以在此通过vm引用vuex中的变量，具体值在vm.$store.state中
				config.header.AuthToken = token;
				config.header.AuthUserId = userid;
			}else{ 
				uni.redirectTo({
					url:"/pages/login/login"
				})
				return Promise.reject("login");
			}
			
		}
		console.log(config)
	    return config 
	}, config => { // 可使用async await 做异步操作
	
	    return Promise.reject(config)
	})
	
	// 响应拦截
	uni.$u.http.interceptors.response.use((response) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
		console.log("==================>响应进来了=================",response);
		const data = response.data

		// 自定义参数
		//不等于200都是错误的，都进行弹窗提示
		if (data.code !== 200) { 	
			if(data.code==609){
				uni.redirectTo({
					url:"/pages/login/login"
				})
				return Promise.reject("login");
			}else{
				uni.$u.toast(data.message)
				return Promise.reject(data)
			}
				
		}
		return data === undefined ? {} : data
	}, (responseError) => { 
		// 对响应错误做点什么 （statusCode !== 200）
		if(responseError!='login'){
			uni.$u.toast("服务器离开了地球表面...")
		}
		
		return Promise.reject(responseError)
	})
}